package modeles;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/*

 * @author Julien Bellaiche
 * @author Romain Louveau
 */

@Entity
public class Disque implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String titre;
    @ManyToMany(cascade={CascadeType.MERGE},fetch=FetchType.EAGER)
    @JoinTable(name="REAL_FILM")
    private Collection<Realisateur> realisateur;
    //@ManyToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
    //private Collection<Genre> genre = new ArrayList();
    private String genre;
    private String pochette;
    @ManyToMany(cascade={CascadeType.MERGE},fetch=FetchType.EAGER)
    @JoinTable(name="ACTEUR_FILM")
    private Collection<Acteur> acteurs;
    private Double prix;
    private String resume;

  
    public Disque() {  
    }

   
  
    public Disque(final String titre,final Collection<Realisateur> realisateur, final String genre, final String pochette, final Collection<Acteur> acteurs,final String resume, final Double prix) {
        
        this.titre = titre;
        this.realisateur = realisateur;
        this.genre = genre;
        this.pochette = pochette;
        this.acteurs = acteurs;
        this.prix = prix;
        this.resume=resume;
        
    }

    public String getResume() {
        return resume;
    }

    public void setResume(String resume) {
        this.resume = resume;
    }
    public Collection<Realisateur> getRealisateur() {
        return realisateur;
    }

    public void setRealisateur(Collection<Realisateur> realisateur) {
        this.realisateur = realisateur;
    }
    
    public void addRealisateur(Realisateur real){
        this.realisateur.add(real);
    }
  
   public Collection<Acteur> getActeurs() {
        return acteurs;
    }
   
   public void addActeurToDisque(Acteur acteur){
       this.acteurs.add(acteur);
   }
    public void setActeurs(Collection<Acteur> acteurs) {
        this.acteurs = acteurs;
    }
    public String getGenre() {
        return genre;
    }

    public void setGenre(final String genre) {
        this.genre = genre;
    }

    public String getPochette() {
        return pochette;
    }

    public void setPochette(final String pochette) {
        this.pochette = pochette;
    }

    public Double getPrix() {
        return prix;
    }

    public void setPrix(final Double prix) {
        this.prix = prix;
    }

    public String getTitre() {
        return titre;
    }

    public void setTitre(final String titre) {
        this.titre = titre;
    }
    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (int) id;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Disque)) {
            return false;
        }
        Disque other = (Disque) object;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "modeles.Disque[ id=" + id + " ]";
    }
    
}
